package com.ctakit.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

import com.ctakit.util.FileUtils;

public class Client

{

	static public void main(String[] args) throws Throwable

	{

	 	System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");   //--该设置用于输出jdk动态代理产生的类
		RealSubject rs = new RealSubject(); // 在这里指定被代理类

		InvocationHandler ds = new DynamicSubject(rs); // 初始化代理类

		

		// 以下是分解步骤

		/*
		 * Class cls = rs.getClass();
		 * Class c = Proxy.getProxyClass(cls.getClassLoader(),cls.getInterfaces()) ;
		 * 
		 * Constructor ct=c.getConstructor(new
		 * Class[]{InvocationHandler.class});
		 * 
		 * Subject subject =(Subject) ct.newInstance(new Object[]{ds});
		 * 
		 */

		// 以下是一次性生成
		Subject subject = (Subject) Proxy.newProxyInstance(rs.getClass().getClassLoader(), rs.getClass().getInterfaces(), ds);

		subject.request();
		
		//打印生成的类地址
		System.out.println(Proxy.getProxyClass(Subject.class.getClassLoader(), Subject.class));
	}
}